home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / magazyn_amiga / 4 / ami052_amos i fonty.txt < prev    next >
Text File  |  1997-09-14  |  6KB  |  229 lines

  1. AMOS I FONTY
  2.  
  3. <lead>Gdy zapytaê uûytkownika AMOS-a, jaka jest najwiëksza wada
  4. tego jëzyka, bez wahania odpowie, ûe jest niâ jego powolnoôê.
  5. Wedîug mnie jest inaczej. Najwiëkszâ bolâczkâ AMOS-a sâ kîopoty z
  6. uûyciem wielu róûnych czcionek.
  7.  
  8. <a>Mariusz Sikorski
  9.  
  10. <txt>Nie jest to moûe aû tak bardzo zauwaûalne, jeôli uûywa sië
  11. jedynie kilku fontów w caîym programie. Lecz jeôli zajdzie
  12. potrzeba szybkiej zmiany czcionki wiele razy, np. na tej samej
  13. stronie, tak jak to jest w magazynach dyskowych, to co wtedy?
  14.  
  15. <sr>Wstëp
  16.  
  17. <txt>Jeûeli chcemy uûyê czcionki w AMOS-ie, musimy najpierw
  18. wczytaê listë fontów. Sîuûâ do tego instrukcje:
  19.  
  20. <l>
  21. Get Rom Fonts -- lista czcionek rezydentnych
  22.  
  23. Get Disc Font -- lista czcionek z katalogu Fonts
  24.  
  25. Get Fonts -- lista wszystkich fontów
  26.  
  27. <txt>Dwie ostatnie funkcje umoûliwiajâ udostëpnienie fontów z
  28. dowolnego katalogu, który jednak naleûy zaasygnowaê jako >Fonts:<
  29. (ASSIGN katalog FONTS:). Instrukcja tworzâca listë fontów powinna
  30. byê uûyta tylko raz, najlepiej na poczâtku programu. Do
  31. poszczególnych czcionek odwoîujemy sië za pomocâ
  32. przyporzâdkowanych im numerów.
  33.  
  34. <l>
  35. =Font$(n)
  36.  
  37. <txt>Powyûsza funkcja zwraca ciâg tekstowy o dîugoôci 38 znaków,
  38. opisujâcy dany font o numerze >n<. Oto znaczenie poszczególnych
  39. znaków tego ciâgu:
  40.  
  41. <przyp>
  42. od 1 do 29    nazwa czcionki
  43.  
  44. od 30 do 33    rozmiar czcionki
  45.  
  46. od 34 do 37    informacja o pochodzeniu czcionki ('ROM' lub 'DISK')
  47.  
  48. <txt>Do zmiany fontu sîuûy instrukcja: >Set Font n<, gdzie n jest
  49. numerem czcionki z utworzonej listy. O tym wszystkim moûna
  50. przeczytaê w kaûdej instrukcji do AMOS-a i ksiâûce o nim.
  51.  
  52. <sr>Wada
  53.  
  54. <txt>Wielkâ wadâ AMOS-a jest to, ûe przy kaûdej zmianie fontu,
  55. font ten jest doczytywany z dysku (ROM-u). Zapewne niejeden z
  56. Was, drodzy Czytelnicy, przeûyî sytuacjë, gdy dysk rzëziî jak
  57. najëty, a fonty zmieniaîy sië w ôlimaczym tempie. Póúniej ktoô
  58. wpadî na pomysî, aby w RAM DYSK-u trzymaê potrzebne czcionki i z
  59. niego je odczytywaê. Jeden dobrze uûyty ASSIGN zaîatwiaî sprawë.
  60. To rozwiâzanie moûna byîo uznaê za rewolucyjne, ale miaîo jednâ
  61. wadë. Przed uûyciem naleûaîo przekopiowaê do RAM DYSK-u wszystkie
  62. potrzebne czcionki.
  63.  
  64. Proponujë inne rozwiâzanie. Otóû za pomocâ biblioteki systemowej
  65. 'diskfont.library' moûna dopisaê potrzebny font do listy fontów
  66. rezydentnych.
  67.  
  68. <l>
  69. Procedure OTWORZ_FONT[NAME$,ROZMIAR]
  70.  
  71.     BLAD=0
  72.  
  73.     ' czy nazwa z koïcówkâ .font?
  74.  
  75.     If Lower$(Right$(NAZWA$,5))<>'.font'
  76.  
  77.         NAZWA$=NAZWA$+'.font'
  78.  
  79.     End If
  80.  
  81.     ' dla systemu dodajemy 0
  82.  
  83.     NAZWA$=NAZWA$+Chr$(0)
  84.  
  85.     ' przydzielamy pamiëê 7 bajtów
  86.  
  87.     Dreg(0)=7 : Dreg(1)=0
  88.  
  89.     ADRES=Execall(-198)
  90.  
  91.     If ADRES=0 Then BLAD=24
  92.  
  93.     ` wpisujemy odpowiednie dane do struktury 
  94.  
  95.     Loke ADR,Varptr(NAZWA$)
  96.  
  97.     Doke ADRES+4,ROZMIAR
  98.  
  99.     Doke ADRES+6,0
  100.  
  101.     Areg(0)=ADRES
  102.  
  103.     ` OpenFont: inicjujemy font
  104.  
  105.     FONT=Gfxcall(-72)
  106.  
  107.     If FONT=0
  108.  
  109.         Lib Open 1,"diskfont.library",0
  110.  
  111.         Areg(0)=ADRES : Areg(1)=ADRES
  112.  
  113.         ' OpenNewFont: do listy systemowych
  114.  
  115.         FONT=Lib Call(1,-30)
  116.  
  117.         If FONT=0 : BLAD=44 : End If
  118.  
  119.         Lib Close 1
  120.  
  121.     Else 
  122.  
  123.         BLAD=44
  124.  
  125.     End If 
  126.  
  127.     ' jeôli ADRES<>0 zwalniamy pamiëê
  128.  
  129.     If ADRES 
  130.  
  131.          Areg(1)=ADRES
  132.  
  133.          Dreg(0)=7
  134.  
  135.          X=Execall(-210)
  136.  
  137.     End If 
  138.  
  139.     ' znajdujemy numer fontu na liôcie
  140.  
  141.     If BLAD=0
  142.  
  143.         Get Rom Fonts 
  144.  
  145.         FONT=0
  146.  
  147.         N$=Upper$(Left$(NAZWA$,Len(NAZWA$)-6))
  148.  
  149.         Repeat 
  150.  
  151.             Inc FONT
  152.  
  153.             A$=Upper$(Font$(FONT))
  154.  
  155.             A$=Left$(A$,Instr(A$,'.FONT')-1)
  156.  
  157.             A=Val(Mid$(Font$(FONT),31,5))
  158.  
  159.         Until(A$=N$ and A=ROZMIAR) or(A$='')
  160.  
  161.     Else 
  162.  
  163.         ' wywoîujemy bîâd AMOS-a numer BLAD
  164.  
  165.         Error BLAD
  166.  
  167.     End If 
  168.  
  169. End Proc[FONT]
  170.  
  171. <txt>Jako parametry naleûy podaê nazwë fontu i rozmiar. W
  172. odpowiedzi otrzymujemy numer fontu z listy fontów rezydentnych.
  173. Procedura dziaîa nastëpujâco: sprawdza, czy podana nazwa czcionki
  174. ma rozszerzenie .font, jeûeli nie -- jest ono dopisywane.
  175. Nastëpnie przydziela 7 bajtów pamiëci do otworzenia nowego fontu.
  176. Te 7 bajtów jest wypeînianych nastëpujâcymi danymi:
  177.  
  178. <przyp>bajty 1-4    adres pamiëci zawierajâcy nazwë czcionki, 
  179.  
  180. bajty 5-6    rozmiar czcionki, 
  181.  
  182. bajt 7    = 0. 
  183.  
  184. <txt>Za pomocâ procedury >OpenFont< z graphics.library inicjujemy
  185. nowy font. Jeûeli taki font (o danym rozmiarze) dostëpny jest w
  186. katalogu >Fonts:<, za pomocâ procedury >OpenNewFont< z
  187. 'diskfont.library' dopisujemy nowâ czcionkë do listy fontów
  188. systemowych.
  189.  
  190. Teraz juû z górki, zwalniamy pamiëê 7 bajtów i sprawdzamy, jaki
  191. nasz nowy font ma numer, na liôcie utworzonej za pomocâ rozkazu
  192. >Get Rom Fonts<. Numer ten jest wyprowadzony z procedury jako
  193. zmienna FONT. Naleûy sië jeszcze kilka sîów wyjaônienia co do
  194. autorstwa procedury. Autorem pierwowzoru jest Andrew Church.
  195. Przedstawiona przeze mnie wersja jest o poîowë krótsza i
  196. skuteczniejsza.
  197.  
  198. Jako zadanie domowe proponujë dopisanie do procedury opcji
  199. usuwania zbëdnych fontów. Nie jest to zadanie zbyt trudne. W
  200. bibliotece graphics.library jest procedura o nazwie >CloseFont<,
  201. jej przesuniëcie wzglëdem bazy to -78 (dziesiëtnie), a jako
  202. parametry naleûy zaîadowaê do rejestru >A1< informacje o foncie.
  203. Mam nadziejë, ûe teraz juû nie bëdziecie mieli kîopotów z
  204. fontami.
  205.  
  206. Jeûeli bëdziecie mieli jakieô pytania czy wâtpliwoôci, to proszë
  207. o listy do redakcji lub, jeôli macie dostëp do Internetu, to o
  208. mail-e bezpoôrednio do mnie pod adresem:
  209.  
  210. <przyp>maksiu@safona.mech.tuniv.szczecin.pl
  211.  
  212. <r>Od Krzysztofa Prusika:
  213.  
  214. Kurs AMOS-a otwarty jest dla wszystkich, którzy opiszâ ciekawie
  215. pewien temat, dotyczâcy tego jëzyka programowania (jednak zwykle
  216. taki artykuî czekajâ niewielkie poprawki redakcyjne).
  217.  
  218. Ostatnio przebywajâc na kanale #AmigaPL, usîyszaîem wiele
  219. interesujâcych opini o AMOS-ie. Cóû, jëzyk ten chyba wzbudza
  220. emocje. Usîyszaîem teû wiele przeciwstawnych opinii na temat
  221. mojego kursu. Czytelnicy MA, apelujë do Was. Piszcie listy
  222. opisujâce to, co Was bardziej interesuje. Wolicie problemy
  223. abstrakcyjne (które moûna wykorzystaê równieû w innych jëzykach
  224. programowania), czy teû porady praktyczne (jak w AMOS-ie zrobiê
  225. to i to). Do tej pory staraîem sië wypoôrodkowywaê te dwie
  226. sprawy, ale jeôli Wasze zdanie przewaûy szalë, to sië dostosujë.
  227. Wszak piszë dla Was.
  228.  
  229.